/**
 * 
 */
package br.com.devschool.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.devschool.util.BaseEntity;
import br.com.devschool.util.EnumNivel;

/**
 * @author ATILLA
 *
 */
@Entity
@Table
public class Curso extends BaseEntity implements Serializable{

	private static final long serialVersionUID = -1514340743374416368L;

	private String 		codigo;
	private Date 		dataCadastro;
	private EnumNivel 	nivel;
	private String 		titulo;
	private String 		descricao;
	private String 		publicoAlvo;
	private String 		preRequisito;
	private String 		alunoAposCurso;
	private Double 		investimento;
	private Grade		grade;
	private Set<Turma> turmas;
	
	public Curso(Integer id, String codigo, Date dataCadastro,
			EnumNivel nivel, String titulo, String descricao,
			String publicoAlvo, String preRequisito, String alunoAposCurso,
			Double investimento, Grade grade, Set<Turma> turmas) {
		super(id);
		this.codigo 		= codigo;
		this.dataCadastro 	= dataCadastro;
		this.nivel 			= nivel;
		this.titulo 		= titulo;
		this.descricao 		= descricao;
		this.publicoAlvo 	= publicoAlvo;
		this.preRequisito 	= preRequisito;
		this.alunoAposCurso = alunoAposCurso;
		this.investimento 	= investimento;
		this.grade 			= grade;
		this.turmas 		= turmas;
	}
	
	public Curso() { }
	
	public String getCodigo() {
		return codigo;
	}
	
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	
	@Column(name="data_cadastro")
	@Temporal(TemporalType.DATE)
	public Date getDataCadastro() {
		return dataCadastro;
	}
	
	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	
	@Enumerated
	@Column(name="enum_nivel_key")
	public EnumNivel getNivel() {
		return nivel;
	}
	
	public void setNivel(EnumNivel nivel) {
		this.nivel = nivel;
	}
	
	public String getTitulo() {
		return titulo;
	}
	
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	
	public String getDescricao() {
		return descricao;
	}
	
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
	@Column(name="publico_alvo")
	public String getPublicoAlvo() {
		return publicoAlvo;
	}
	
	public void setPublicoAlvo(String publicoAlvo) {
		this.publicoAlvo = publicoAlvo;
	}
	
	@Column(name="pre_requisito")
	public String getPreRequisito() {
		return preRequisito;
	}
	
	public void setPreRequisito(String preRequisito) {
		this.preRequisito = preRequisito;
	}
	
	@Column(name="aluno_apos_curso")
	public String getAlunoAposCurso() {
		return alunoAposCurso;
	}
	
	public void setAlunoAposCurso(String alunoAposCurso) {
		this.alunoAposCurso = alunoAposCurso;
	}
	
	public Double getInvestimento() {
		return investimento;
	}
	
	public void setInvestimento(Double investimento) {
		this.investimento = investimento;
	}

	@OneToOne(mappedBy="curso")
	public Grade getGrade() {
		return grade;
	}

	public void setGrade(Grade grade) {
		this.grade = grade;
	}

	@OneToMany(mappedBy="curso", fetch = FetchType.EAGER)
	public Set<Turma> getTurmas() {
		return turmas;
	}

	public void setTurmas(Set<Turma> turmas) {
		this.turmas = turmas;
	}
	
}
